//1.一元操作符
function test1 () {
    //(1)基础
    let age = 29;
    ++age;
    console.log(age);  // 30

    //(2)
    let age1 = 29;
    let anotherAge = --age1 + 2;
    console.log(age1); // 28 
    console.log(anotherAge); // 30

    //(3)其他类型转数值类型
    let s1 = "2";
    let s2 = "z";
    let b = false;
    let f = 1.1;
    let o = {
        valueOf () {
            return -1;
        }
    };
    s1++; // 值变成数值 3 
    s2++; // 值变成 NaN 
    b++; // 值变成数值 1 
    f--; // 值变成 0.10000000000000009（因为浮点数不精确）
    o--; // 值变成-2

    //(4)
    let num = 25;
    let num1;
    num1 = + num;
    console.log("num1 __" + num1); // 25
    num2 = -num;
    console.log("num2 __" + num2); // -25

    //(5)
    let x1 = "01";
    let x2 = "1.1";
    let x3 = "z";
    let bx = false;
    let fx = 1.1;
    let ox = {
        valueOf () {
            return -1;
        }
    };
    x1 = +x1; // 值变成数值 1 
    x2 = +x2; // 值变成数值 1.1 
    x3 = +x3; // 值变成 NaN 
    bx = + bx; // 值变成数值 0 
    fx = +fx; // 不变，还是 1.1 
    ox = +ox; // 值变成数值-1

    //(6)
    let s11 = "01";
    let s12 = "1.1";
    let s13 = "z";
    let b1 = false;
    let f1 = 1.1;
    let o1 = {
        valueOf () {
            return -1;
        }
    };
    s12 = -s12; // 值变成数值-1.1 
    s13 = -s13; // 值变成 NaN 
    b1 = -b1; // 值变成数值 0 
    f1 = -f1; // 变成-1.1 
    o1 = -o1; // 值变成数值 1

}
test1();


//2.逻辑非!
function test2 () {
    /*
    如果操作数是对象，则返回 false。 
    如果操作数是空字符串，则返回 true。 
    如果操作数是非空字符串，则返回 false。 
    如果操作数是数值 0，则返回 true。 
    如果操作数是非 0 数值（包括 Infinity），则返回 false。 
    如果操作数是 null，则返回 true。 
    如果操作数是 NaN，则返回 true。 
    如果操作数是 undefined，则返回 true。
    */
    console.log(!false); // true 
    console.log(!"blue"); // false 
    console.log(!0); // true 
    console.log(!NaN); // true 
    console.log(!""); // true 
    console.log(!12345); // false

    //两个叹号 !! 相当于强制类型转换Boolean()
    console.log(!!"blue"); // true 
    console.log(!!0); // false 
    console.log(!!NaN); // false 
    console.log(!!""); // false 
    console.log(!!12345); // true

}
test2();

//3.逻辑与或和ios一样 &&  ||

//4.乘除法 取余

//5.指数操作符 2的平方这种

//6.加法操作符
function test6 () {
    let result1 = 5 + 5; // 两个数值
    console.log(result1); // 10 
    let result2 = 5 + "5"; // 一个数值和一个字符串
    console.log(result2); // "55"
}
test6();


//7.关系操作符  >   <   >=   <=  ==  != 

function test7 () {
    //全等操作符 ===
    let result1 = ("55" == 55); // true，转换后相等
    let result2 = ("55" === 55); // false，不相等，因为数据类型不同
    console.log(result1);
    console.log(result2);
}
test7();


//8.条件操作符  三目运算符

//9.赋值运算符
function test9 () {
    let num = 10;
    num += 10;
    console.log('test9' + num);
}
test9();